//===----------------------------------------------------------*- swift -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2015 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See http://swift.org/LICENSE.txt for license information
// See http://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//

%import gyb
%TMirrorDecl = gyb.parseTemplate("../common/MirrorDecl.gyb")
%TMirrorConformance = gyb.parseTemplate("../common/MirrorConformance.gyb")
%TMirrorBoilerplate = gyb.parseTemplate("../common/MirrorBoilerplate.gyb")

% for Type in [['CollectionOfOne',1,"element",\
%               'CollectionOfOne(\( _reflect(_value.element).summary ))'],\
%             ['EmptyCollection',0,"DONTSHOWME",'EmptyCollection']]:
%   Self = Type[0]
%   Count = Type[1]
%   ElementName = Type[2]
%   SummaryString = Type[3]
%   MirrorDecl = gyb.executeTemplate(TMirrorDecl,\
%                                    introspecteeType=Self,\
%                                    genericArgs=['T'],\
%                                    disposition='Struct')
%   MirrorConformance = gyb.executeTemplate(TMirrorConformance,\
%                                    introspecteeType=Self,\
%                                    genericArgs=['T'],\
%                                    disposition='Struct')
%   MirrorBoilerplate = gyb.executeTemplate(TMirrorBoilerplate,\
%                                    introspecteeType=Self,\
%                                    genericArgs=['T'],\
%                                    disposition='Struct')

${MirrorDecl} {
  ${MirrorBoilerplate}

  var count: Int { return ${Count} }

  subscript(i: Int) -> (String, _MirrorType) {
    _precondition(i >= 0 && i < count, "_MirrorType access out of bounds")
    return ("${ElementName}", _reflect(_value[_value.startIndex.advancedBy(i)]))
  }

  var summary: String { return "${SummaryString}" }

  var quickLookObject: PlaygroundQuickLook? { return nil }
}

${MirrorConformance}

